大名鼎鼎的oo (object-oriented),對沒有程式基礎或剛開始學寫程式的人來說,可能聽起來像是某種代號,但其實物件導向在程式設計領域非常重要! 而OO的基本原則,每個人都能夠掌握!
物件導向暱稱為oo,是電腦科學領域中的一種程式設計方式,很多大家所熟知的程式語言,如Java, Python, PHP, C++ 等等都使用物件導向特性,就連原先其實物件導向特性不強的JavaScript在ES6版本後也加強了對類(class)的使用。
所以說瞭解物件導向,對學習程式語言是很有幫助的,但問題就在這了,大部分介紹物件導向的資料都複雜的不得了,等到讀者開始頓悟時,一堆技術債都已經欠的像玉山一樣高了。物件導向說到底是一個抽象概念,但請不要害怕這裡說的抽象概念,使用抽象概念能讓之後寫程式更方便,請聽我娓娓道來。
物件最外層是類(class),他就像是一個外包裝,涵蓋了一些東西,例如: Kayne West的專輯就是一個類(class)
在這專輯裡有13首歌曲,時長68 分42秒,演唱者除了肯爺外還有其他合作的歌手,除此之外,每一首歌有不同的詞曲製作人,這是一個得葛萊美最佳饒舌專輯得作品…等等,這些特性全都被包在這個稱為My Beautiful Dark Twisted Fantasy的專輯(類)中,好專輯不買嗎?(怎麼講一講變成開始推銷肯爺的專輯呢?
接下來,介紹物件導向的三大特性以及五大原則。
物件導向三大特性:
封裝(Encapsulation)
意思是指公開必要公開的資訊,不須公開的資訊則隱藏起來,以例子來說,看看專輯,從外包裝來看他給予一定的資訊,如這個專輯的演唱人是誰,但更深入的資訊都被隱藏起來要打開專輯才能看到。
繼承(Inhertitance)
子類會繼承父類擁有的所有特性,以專輯來說,每一個專輯都來自很久以前出現的第一個專輯原型,從這個專輯原型衍伸出不同樣式的專輯,所有的子類專輯都共同有父類專輯的特性,例如:裡面一定有至少一張唱片。
多型(polymorphism)
對不同類(class)做同一種操作,將得到不同的結果,想像將專輯CD放進CD撥放器裡,不同的專輯將撥放出不同的音樂。
物件導向的五大原則:
單一職責原則(Single responsibility principle, SRP)
讓一個函數(function)只做一件事,這樣在發生錯誤時能將錯誤快速定位,也可以避免寫出傳說中的義大利麵程式。
開放封閉原則(Open-Close principle, OCP)
開放指的是對繼承開放,封閉指的是子類不可往上更改父類的內容。如果想擴充系統的功能要用子類的繼承與相依性注入等方式擴充。
里氏替換原則(Liskov substitution principle, LSP)
子類能在不影響程式運作的方式代替父類所做的事,也就是說就算子類很叛逆多了一堆新功能,也是可以代替爸爸的位置讓程式繼續run下去。
接口隔離原則(Interface segregation principle, ISP)
針對不同用戶只開放該用戶需要的介面,這樣可以避免掉不相關的需求意外產生異動。表示不需要的東西就不用給用戶,以必免意外被更動到。
依賴反轉原則(Dependency inversion principle, DIP)
當高階模組A內部使用低階模組B時,高階模組A不應該依賴低階模組B,如果要改變時,兩個模組都應該依賴另外的抽象介面。
一些收藏小私心分享: